package ejb.casacentral.service.controller;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import comun.casacentral.proxy.ofiventa.cotizado.ListadoRodCotizadoXML;
import comun.casacentral.proxy.ofiventa.cotizado.RodamientoCotizadoXML;
import comun.casacentral.proxy.ofiventa.cotizar.ListadoRodCotizarXML;
import comun.casacentral.proxy.ofiventa.cotizar.RodamientoCotizarXML;
import comun.casacentral.proxy.parceador.UtilsXML;

import ejb.casacentral.log.CasaLogger;
import ejb.casacentral.persistence.entity.ItemListadoPrecio;
import ejb.casacentral.persistence.entity.ListadoPrecios;
import ejb.casacentral.persistence.entity.Vigencia;

@Stateless
public class CotizacionControllerBean implements CotizacionController,
		Serializable {
	
	@EJB
	private ListadoController listadoController;

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;


	public CotizacionControllerBean() {

	}

	@Override
	public String obtenerCotizacion(String xml){
		ListadoRodCotizarXML listadoACotizar = null;
		UtilsXML parcer= new UtilsXML();
		
		try {
			listadoACotizar = parcer.toClase(xml, ListadoRodCotizarXML.class);
		} catch (Exception e) {
			
			CasaLogger.log("Error parseo xml a cotizar.");
			e.printStackTrace();
		}
		
		ListadoRodCotizadoXML listadoCotizado=new ListadoRodCotizadoXML();
		listadoCotizado.setVigencia(30);
		List<RodamientoCotizadoXML> items=new ArrayList<RodamientoCotizadoXML>();

		for(RodamientoCotizarXML rod : listadoACotizar.getItems()){
			
			RodamientoCotizadoXML nuevoItem=new RodamientoCotizadoXML();
			nuevoItem.setPrecio(0);
			nuevoItem.setCantidad(rod.getCantidad());
			nuevoItem.setCodigo(rod.getCodigo());

			List<ListadoPrecios> listadosPrecios= listadoController.obtenerListadoPrecios();
			
			boolean flag=false;
			for(int j=0;j<listadosPrecios.size()&&!flag;j++){
				ListadoPrecios xListado=listadosPrecios.get(j);
				Vigencia xVigencia=xListado.getVigencia();
				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
				try{
				Date xDesde=format.parse(xVigencia.getFechaDesde());
				Date xHasta=format.parse(xVigencia.getFechaHasta());
				Date xActual=new Date();
				@SuppressWarnings("deprecation")
				Date xActualDate=format.parse(String.valueOf(xActual.getYear()+1900)+"-"+String.valueOf(xActual.getMonth()+1)+"-"+String.valueOf(xActual.getDate()));
				if(xActualDate.compareTo(xDesde)>=0&&xActualDate.compareTo(xHasta)<=0){
					List<ItemListadoPrecio> xListadoRod=xListado.getRodamientos();
					for(int x=0;x<xListadoRod.size()&&!flag;x++){
						ItemListadoPrecio item=xListadoRod.get(x);
						if(item.getRodamiento().getCodigo().toUpperCase().equals(nuevoItem.getCodigo().toUpperCase())){
							flag=true;
							nuevoItem.setPrecio(Float.valueOf(String.valueOf(item.getPrecio())));
							items.add(nuevoItem);
						}
					}
				}
				}catch(ParseException e){
					CasaLogger.log("Error formateo de vigencia en obtencion de cotizacion.");
					e.printStackTrace();
				}
			}	
		}
		listadoCotizado.setItems(items);
		String xmlResult=parcer.toXML(listadoCotizado, ListadoRodCotizadoXML.class);
		return xmlResult;
	}



	

}
